package com.dd.common.service;

import com.dd.common.dto.system.user.SysUserQueryDTO;
import com.dd.common.dto.system.user.SysUserUpdateDTO;
import com.dd.common.pojo.dto.PageDTO;
import com.dd.common.utils.PageResult;
import com.dd.common.vo.MenuVO;
import com.dd.common.vo.SysUserAuthInfoVO;
import com.dd.common.entity.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.common.vo.SysUserDetailVO;
import com.dd.common.vo.SysUserVO;

import java.util.List;

/**
* @author cheng
* @description 针对表【c_sys_user(系统用户表)】的数据库操作Service
* @createDate 2025-08-23 17:00:07
*/
public interface SysUserService extends IService<SysUser> {

    /**
     * 获取用户的角色编码列表
     * @param userId 用户ID
     * @return 角色编码列表，如 ["ROLE_SUPER_ADMIN", "ROLE_USER"]
     */
    List<String> getSysUserRoles(Long userId);

    /**
     * 获取用户拥有的操作权限标识列表
     * @param userId 用户ID
     * @return 权限标识列表，如 ["user:add", "role:delete"]
     */
    List<String> getSysUserPermissions(Long userId);

    /**
     * 获取用户的菜单树（仅目录和菜单）
     */
    List<MenuVO> getUserMenuTree(Long userId);

    /**
     * 获取用户的完整认证信息：菜单树 + 权限 + 角色
     * @param userId
     * @return
     */
    SysUserAuthInfoVO getSysUserAuthInfo(Long userId);

    /**
     * 查询用户列表，不分页
     * @param dto
     * @return
     */
    List<SysUserVO> listQuery(SysUserQueryDTO dto);

    /**
     * 分页查询用户列表
     * @param pageDTO
     * @param dto
     * @return
     */
    PageResult<SysUserVO> pageQuery(PageDTO pageDTO, SysUserQueryDTO dto);

    /**
     * 编辑用户，包括连表修改角色、部门、职位
     * @param dto
     * @return
     */
    Boolean edit(SysUserUpdateDTO dto);

    /**
     * 获取用户详情
     * @param id 用户ID
     * @return
     */
    SysUserDetailVO detail(Long id);
}
